행렬의 곱셈
📔 문제 설명
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
📓 제약 조건
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
📓 입출력의 예
arr1 | arr2 | return |
---|---|---|
[ [1, 4], [3, 2], [4, 1] ] | [ [3, 3], [3, 3] ] | [ [15, 15], [15, 15], [15, 15] ] |
[ [2, 3, 2], [4, 2, 4], [3, 1, 4] ] | [ [5, 4, 3], [2, 4, 1], [3, 1, 1] ] | [ [22, 22, 11], [36, 28, 18], [29, 20, 14] ] |
❗ 1번째
이 문제는 다소 복잡하게 보일지 몰라도 행렬의 곱셈의 규칙을 알면 쉽게 풀어낼수있는 문제이다
첫번째로 해야할일은 리턴해줄 2차원배열의 초기화 그리고 행렬의 곱셈을 해줄 로직이다
✅ 실행 코드
function solution(arr1, arr2) {
const result = Array(arr1.length).fill().map(() => Array(arr2[0].length).fill(0)); // 답으로 쓸 2차원 배열 만들기 행수와 열수를 받아서 곱한다고 생각하면 편함
for (let i = 0; i < arr1.length; i++) { // arr1의 행
for (let j = 0; j < arr2[0].length; j++) { // arr2의 열
let sum = 0;
for (let k = 0; k < arr2.length; k++) { // 계산을 위한 인덱스
sum += arr1[i][k] * arr2[k][j]; // 대응하는 값을 곱함을 반복하여 계속 더해줌
}
result[i][j] = sum; //최종 행렬 값을 2차원 배열에 담아줌
}
}
return result;
}
📚 문제 느낀점
첫번째로 2차원 배열의 초기화에서 조금 많이 머뭇거렷고 이 문제를 위해 행렬의 곱을 복습을 한번했습니다.
크게 어렵지 않은 문제였지만 행렬의 곱의 방식을 몰랐다면 계산하는 로직을 헷갈릴거같았습니다.
© 문제 출처
저자 출제